package Delegado;

import java.rmi.*;
import java.util.ArrayList;
import java.util.List;



import dto.ItemListaDePrecioTO;
import dto.ListaDePrecioTO;
import dto.ClienteTO;
import dto.CotizacionTO;
import dto.FacturaTO;
import dto.OrdenCompraTO;
import dto.OrdenPedidoTO;
import dto.ProveedorTO;
import dto.RemitoTO;
import dto.RodamientoTO;
import dto.SolicitudDeCotizacionTO;
import Remoto.IGestionRodamientos;


public class BD {
    
	IGestionRodamientos gestion;
	
    public void LookupService(String uri) {
    	try 
    	{
    		String vinculo = "//".concat(uri.trim().concat("/GestionRodamientos"));
			gestion = (IGestionRodamientos)Naming.lookup (vinculo);
			System.out.println(vinculo);
		} 
    	catch (Exception e) 
    	{
			System.out.println(e.getMessage());
			e.printStackTrace();
		} 
    }
    
    public OrdenPedidoTO parserOrdenPedido (String path){
    	
    	try 
    	{
			return gestion.ParserOrdenPedido(path);
		} 
    	catch (RemoteException e) 
    	{
			e.printStackTrace();
		}
    	return null;
    }
    
    public void persistOrdenPedido (OrdenPedidoTO opTO){
    	
    	try {
			gestion.persistOrdenPedido(opTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
	public ListaDePrecioTO parserListaPrecios(String path) {
		try {
			return gestion.ParserListaPrecios(path);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return null;
    }

	public void persistListaPrecios(ListaDePrecioTO listaPreciosTO) 
	{
		try 
		{
			gestion.persistListaPrecios(listaPreciosTO);
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
    	
		
	}
    
    public CotizacionTO parserCotizacion (String path){	
    	try {
			return gestion.ParserCotizacion(path);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return null;
    }
    
    public void persistCotizacion (CotizacionTO cotizacionTO){
    	try {
			gestion.persistCotizacion(cotizacionTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
	public SolicitudDeCotizacionTO parserSolicitudCotizacion(String path) {
		try {
			return gestion.ParserSolicitudCotizacion(path);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return null;
	}
	
	public void persistSolicitudCotizacion (SolicitudDeCotizacionTO solCotiTO){
    	try {
			gestion.persistSolicitud(solCotiTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
	public OrdenCompraTO parserOrdenCompraTO(String path)
	{
		try 
		{
			return gestion.parserOrdenCompraTO(path);
		}
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
    	return null;
	}
	
	public void persistOrdenCompra (OrdenCompraTO ordenCompraTO){
    	try {
			gestion.persistOrdenCompra(ordenCompraTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
	public FacturaTO parserFactura(String path) {
		try {
			return gestion.parserFactura(path);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	return null;
	}
	
	public void persistFactura(FacturaTO facturaTO){
    	try {
			gestion.persistFactura(facturaTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
	public RemitoTO parserRemito(String path) 
	{
		try 
		{
			return gestion.parserRemito(path);
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
    	return null;
	}
	
	public void persistRemito(RemitoTO remitoTO){
    	try {
			gestion.persistRemito(remitoTO);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
    
    public String getUltimoCliente()
    {
    	try {
			String id = gestion.getUltimoId();
			return id;
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;	
    }
    public ClienteTO getUltimoClienteTO() {

    	ClienteTO id;
		try {
			id = gestion.getUltimoCliente();
			return id;	
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
    public List<ClienteTO> listarClientes() {

    	List<ClienteTO> clis;
		try {
			clis = gestion.listarClientes();
			return clis;	
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
    public void altaCliente(String razonSocial, String cuil, String tipo, String calle,String numero,String piso, String departamento , String localidad,String area, String numeroTel) 
    {
    	try 
    	{
    			gestion.agregarCliente(razonSocial, cuil, tipo, calle, numero, piso, departamento, localidad, area, numeroTel);
    	} 
    	catch (Exception e) 
    	{
    		System.out.println(e.getMessage());
			e.printStackTrace();
    	}
    }
    
    public List<SolicitudDeCotizacionTO> generarListaSolicitudes()
    {
    	try 
    	{
    			return gestion.listarSolicitudesDeCotizacion();
    	} 
    	catch (Exception e) 
    	{
    		System.out.println(e.getMessage());
			e.printStackTrace();
    	}
    	
    	
		return null;
    	
    	
    }
    
    public SolicitudDeCotizacionTO obtenerSolicitudDeCotizacion(int id)
    {
    	try 
    	{
    			return gestion.obtenerSolicitud(id);
    	} 
    	catch (Exception e) 
    	{
    		System.out.println(e.getMessage());
			e.printStackTrace();
    	}
    	
    	
		return null;
    	
    	
    }


	public int crearCotizacion(CotizacionTO c) 
	{
		try 
    	{
    			return gestion.crearCotizacion(c);
    	} 
    	catch (Exception e) 
    	{
    		System.out.println(e.getMessage());
			e.printStackTrace();
    	}
		return -1;
    	
	}


	public CotizacionTO obtenerCotizacion(int numeroCotizacion) 
	{
		return null;
	}
 
	
	public ClienteTO ClienteConMasFacturas() {
		try {
			ClienteTO cliente = gestion.ClienteConMasFacturas();
			return cliente;
		} 
		catch (Exception e) 
		{
			System.out.println(e.getMessage());
			e.printStackTrace();
		}
		return null;
	}


	public void altaProveedor(String razonSocial, String cuit, String tipo) {

    	try 
    	{
    			gestion.agregarProveedorPorParam(razonSocial, cuit, tipo);
    	} 
    	catch (Exception e) 
    	{
    		System.out.println(e.getMessage());
			e.printStackTrace();
    	}

		
	}

	public ProveedorTO getUltimoProveedorTO() {
		try {
			ProveedorTO provTO;
			provTO = gestion.getUltimoProveedorTO();
			return provTO;
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
		


	}

	public String getUltimoIdProveedor() {
		try {
			String id = gestion.getUltimoIdProveedor();
			return id;
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public List<RodamientoTO> listarRodamientos(String codigo, String serie, String marca, String caracteristicas, String origen) 
	{
		// TODO Auto-generated method stub
		return null;
	}

	public void altaCliente(ClienteTO c) {

		this.altaCliente(c.getRazonSocial(), c.getCuil(), c.getTipo(), c.getDomicilio().getCalle(), c.getDomicilio().getNumero(), c.getDomicilio().getPiso(), c.getDomicilio().getDepartamento(), c.getDomicilio().getLocalidad(), c.getTelefonos().get(0).getArea(), c.getTelefonos().get(0).getNumero());
	}

	public RodamientoTO obtenerRodamiento(int parseInt) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<ItemListaDePrecioTO> obtenerListaMejoresPrecios(String marca, String origen, String sufijo, String serie, boolean todos) 
	{
		List<ItemListaDePrecioTO> Listaitems = new ArrayList<ItemListaDePrecioTO>();
		List<ListaDePrecioTO> lista = new ArrayList<ListaDePrecioTO>();
		try 
		{
			lista = gestion.getListaPrecios();
			
			for (ListaDePrecioTO listaAux : lista) 
			{
				for (ItemListaDePrecioTO itemAux : listaAux.getItemsListaDePrecio()) 
				{
					
					if ((!marca.equals("") && itemAux.getRodamiento().getMarcaTO().getNombre().equals(marca))||(marca.equals("")))
					{
						if ((!origen.equals("") && itemAux.getRodamiento().getPaisOrigenTO().getNombre().equals(origen))||(origen.equals("")))
						{
							if ((!sufijo.equals("") && itemAux.getRodamiento().getSufijo().equals(sufijo))||(sufijo.equals("")))
							{
								if ((!serie.equals("") && itemAux.getRodamiento().getNumeroSerie().equals(serie))||(serie.equals("")))
								{
									Listaitems.add(itemAux);
								}
							}
						}
					}
				
				}
			}
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
		
		return Listaitems;
	}

	public FacturaTO obtenerFactura(int facturaId) 
	{
		try 
		{
			return gestion.obtenerFactura(facturaId);
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
			return null;
		}
	}

	public List<FacturaTO> facturar() 
	{
		try 
		{
			return gestion.facturar();
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
		}
		return null;
	}

	public String clienteporcuil(String i) 
	{
		try {
			return gestion.clientePorCuil(i);
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}

	public int generarOrdenesDeCompra() 
	{
		try 
		{
			return gestion.generarOrdenesDeCompra();
		} 
		catch (RemoteException e) 
		{
			e.printStackTrace();
			return 0;
		}
	}

	public int generarRemitos() 
	{
		try 
		{
			return gestion.generarRemitos();
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
			return 0;
		}
		
	}



}
